{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Pointer Network Attention Demo\n",
    "\n",
    "The below code trains a [pointer network](https://arxiv.org/abs/1506.03134) like architecture that takes as input a sequence of vectors and outputs the vector with the minimum or maximum value along a particular coordinate. In other words, a neural network version of argmax/argmin.\n",
    "\n",
    "### Setup\n",
    "\n",
    "Let $\\{\\mathbf{c}_i\\}_{i=1}^n = (\\mathbf{c}_1, \\ldots, \\mathbf{c}_n)$ be a sequence of $n$ vectors with each $\\mathbf{c}_i \\in \\mathbb{R}^d$. The minimum and maximum target positions, $i_\\min$ and $i_\\max$, for the sequence are given by\n",
    "\n",
    "$$\n",
    "\\begin{align*}\n",
    "    i_\\min &= \\text{argmin}_i \\left\\{ x_{i, k_\\min}\\right\\} \\\\\n",
    "    i_\\max &= \\text{argmax}_i \\left\\{ x_{i, k_\\max}\\right\\} \\\\\n",
    "\\end{align*}\n",
    "$$\n",
    "\n",
    "where $1 \\leq k_\\min \\neq k_\\max \\leq d$ are a priori chosen coordiantes along which to compute the minimum or maximum.\n",
    "\n",
    "### Model\n",
    "\n",
    "The model has the following form\n",
    "\n",
    "$$\n",
    "\\begin{align*}\n",
    "    \\mathbf{u}_i &= A \\mathbf{c}_i & \\; i = 1, \\ldots, n \\\\\n",
    "    \\mathbf{v} &= B \\mathbf{q} \\\\\n",
    "    \\mathbf{p} &= \\text{softmax}_i(\\mathbf{v}^T \\mathbf{u}_i) \\\\\n",
    "    \\mathbf{z} &= \\sum_i p_i \\mathbf{c}_i\n",
    "\\end{align*}\n",
    "$$\n",
    "\n",
    "where $A, B \\in \\mathbb{R}^{p \\times d}$ and $\\mathbf{q} \\in \\{\\mathbf{q}_\\min, \\mathbf{q}_\\max\\} \\subseteq \\mathbb{R}^d$ is a query vector indicating whether the model should output the minimum or maximum.\n",
    "\n",
    "The loss is defined as the mean squared error between the output and target vector.\n",
    "\n",
    "$$\n",
    "\\begin{align*}\n",
    "    l &= \\frac{1}{n}\\sum_j (z_j - c_{t,j})^2\n",
    "\\end{align*}\n",
    "$$\n",
    "\n",
    "where $t$ is either $i_\\min$ or $i_\\max$.\n",
    "\n",
    "### Details\n",
    "The vectors $\\mathbf{q}_\\min$ and $\\mathbf{q}_\\max$ are initialized to random values sampled from $N(\\mathbb{0}, \\mathbb{I}_d)$ and held constant throughout training. The code below uses 10 dimensional context and query vectors and 7 dimensional hidden representations. The model is optimized over 1,600 training instances using RMSProp with mini batches of size 8. Each training instance contains betwen 5 and 14 context vectors. To better assess generalization validation instances are longer, containing between 15 and 24 context vectors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from __future__ import print_function\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "\n",
    "import torch\n",
    "from torch import FloatTensor\n",
    "from torch.autograd import Variable\n",
    "from torch.nn import Linear, Module\n",
    "\n",
    "from attention import attend\n",
    "\n",
    "\n",
    "seed = sum(map(ord, 'les bons mots'))\n",
    "np.random.seed(seed)\n",
    "torch.manual_seed(seed)\n",
    "\n",
    "\n",
    "def Volatile(x):\n",
    "    return Variable(x, volatile=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "class Data(object):\n",
    "    dim = 10\n",
    "    min_position, max_position = 3, 7\n",
    "    q_min = np.random.normal(0, 1, dim).astype(np.float32)\n",
    "    q_max = np.random.normal(0, 1, dim).astype(np.float32)\n",
    "    query = np.row_stack([q_min, q_max])\n",
    "\n",
    "    @staticmethod\n",
    "    def create_minibatches(n, m, min_length, max_length):\n",
    "        assert 0 < min_length <= max_length\n",
    "\n",
    "        minibatches = []\n",
    "        for i in range(n):\n",
    "            lengths = np.random.randint(min_length, max_length + 1, m)\n",
    "            context = np.zeros((m, lengths.max(), Data.dim), dtype=np.float32)\n",
    "            target = np.zeros((m, 2, Data.dim))\n",
    "            target_indices = []\n",
    "\n",
    "            for j, length in enumerate(lengths):\n",
    "                c = np.random.normal(0, 1, (length, Data.dim))\n",
    "                k_min = np.argmin(c[:,Data.min_position])\n",
    "                k_max = np.argmax(c[:,Data.max_position])\n",
    "                target_min = c[k_min]\n",
    "                target_max = c[k_max]\n",
    "                context[j,:length] = c\n",
    "                target[j,0] = target_min\n",
    "                target[j,1] = target_max\n",
    "                target_indices.append((k_min, k_max))\n",
    "\n",
    "            query = FloatTensor(np.tile(Data.query, (m, 1, 1)))\n",
    "            context = FloatTensor(context)\n",
    "            target = FloatTensor(target)\n",
    "            minibatches.append((query, context, target, lengths, target_indices))\n",
    "        return minibatches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "class PointerNet(Module):\n",
    "    def __init__(self, n_hidden):\n",
    "        super(PointerNet, self).__init__()\n",
    "        self.n_hidden = n_hidden\n",
    "        self.f = Linear(Data.dim, n_hidden)\n",
    "        self.g = Linear(Data.dim, n_hidden)\n",
    "\n",
    "    def forward(self, q, x, lengths=None, **kwargs):\n",
    "        batch_size_q, n_queries, dim_q = q.size()\n",
    "        batch_size_x, n_inputs, dim_x = x.size()\n",
    "        assert batch_size_q == batch_size_x\n",
    "        assert dim_q == dim_x\n",
    "        batch_size = batch_size_q\n",
    "        dim = dim_q\n",
    "\n",
    "        q_flat = q.view(batch_size*n_queries, dim)\n",
    "        u_flat = self.f(q_flat)\n",
    "        u = u_flat.view(batch_size, n_queries, self.n_hidden)\n",
    "\n",
    "        x_flat = x.view(batch_size*n_inputs, dim)\n",
    "        v_flat = self.g(x_flat)\n",
    "        v = v_flat.view(batch_size, n_inputs, self.n_hidden)\n",
    "\n",
    "        return attend(u, v, value=x, context_sizes=lengths, **kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "batch_size = 8\n",
    "\n",
    "n_train = 200\n",
    "min_length_train, max_length_train = 5, 14\n",
    "train_batches = Data.create_minibatches(n_train, batch_size, min_length_train, max_length_train)\n",
    "\n",
    "n_valid = 100\n",
    "min_length_valid, max_length_valid = 15, 24\n",
    "valid_batches = Data.create_minibatches(n_valid, batch_size, min_length_valid, max_length_valid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "net = PointerNet(7)\n",
    "opt = torch.optim.RMSprop(net.parameters(), lr=0.001)\n",
    "mse = torch.nn.MSELoss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1] 0.560\n",
      "[ 2] 0.237\n",
      "[ 3] 0.157\n",
      "[ 4] 0.120\n",
      "[ 5] 0.099\n",
      "[ 6] 0.085\n",
      "[ 7] 0.075\n",
      "[ 8] 0.068\n",
      "[ 9] 0.062\n",
      "[10] 0.058\n"
     ]
    }
   ],
   "source": [
    "epoch = 0\n",
    "max_epochs = 10\n",
    "while epoch < max_epochs:\n",
    "    sum_loss = 0\n",
    "    for query, context, target, lengths, target_indices in train_batches:\n",
    "        net.zero_grad()\n",
    "        output = net(Variable(query), Variable(context), lengths=lengths)\n",
    "        loss = mse(output, Variable(target))\n",
    "        loss.backward()\n",
    "        opt.step()\n",
    "        sum_loss += loss.data[0]\n",
    "    epoch += 1\n",
    "    print('[{:2d}] {:5.3f}'.format(epoch, sum_loss / n_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "valid loss: 0.066\n",
      "valid error min: 0.000\n",
      "valid error max: 0.000\n"
     ]
    }
   ],
   "source": [
    "sum_loss = 0\n",
    "sum_error_min = 0\n",
    "sum_error_max = 0\n",
    "for query, context, target, lengths, target_indices in valid_batches:\n",
    "    weight, output = net(Volatile(query), Volatile(context), lengths=lengths, return_weight=True)\n",
    "\n",
    "    loss = mse(output, Volatile(target))\n",
    "    sum_loss += loss.data[0]\n",
    "\n",
    "    weight = weight.data.numpy()\n",
    "    for i, (i_min_true, i_max_true) in enumerate(target_indices):\n",
    "        w_min, w_max = weight[i]\n",
    "        i_min_pred = w_min.argmax()\n",
    "        i_max_pred = w_max.argmax()\n",
    "        sum_error_min += int(i_min_true != i_min_pred)\n",
    "        sum_error_max += int(i_max_true != i_max_pred)\n",
    "\n",
    "print('valid loss: {:5.3f}'.format(sum_loss / n_valid))\n",
    "print('valid error min: {:5.3f}'.format(sum_error_min / (n_valid * batch_size)))\n",
    "print('valid error max: {:5.3f}'.format(sum_error_max / (n_valid * batch_size)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxMAAAMTCAYAAADaWkpQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAMTQAADE0B0s6tTgAAIABJREFUeJzs3Xl8VNX9//HXnZmsJBAIEhYVUFRcUFFURGSRSNgjWEWk\nCrZStLQVvv1KW6uIUkUL7c+9ClQKiPJVBBEFqiJCQaiALC6ogCJbWBJQQyCZycz9/RESSEjIzNyZ\nzHLfz8eDB8nk3nM/n3PunDNn7p05hmmaJiIiIiIiIgFyRDoAERERERGJTZpMiIiIiIhIUDSZEBER\nERGRoGgyISIiIiIiQdFkQkREREREgqLJhIiIiIiIBEWTCRERERERCYomExKX2rZtyyWXXMLhw4dP\n+dsdd9xB27Zt2bt3LwBXXHEFX331Va1lPvzwwzz55JMhj1VEREIjkL4/WCNGjOCVV16xVIZIPHFF\nOgCRcKlfvz6LFi1i6NChFY/l5eXx1VdfYRhGxWOffvqpX+U98sgjIY9RRERCy9++P1hTp061XIZI\nPNGVCYlbffr0YcGCBZUeW7BgATk5OZUea9u2LV988UXFz7NmzSI7O5urr76aX//61xw5cgSAP/3p\nT/zlL3+p+PnJJ59k+PDhtG/fnkGDBvHZZ58xatQo2rdvT//+/SuudsyfP5/+/ftXOmb79u1Zu3Yt\nADfccAOzZs2iT58+tG/fnt/85jds3ryZQYMG0b59e375y19WxCAiIqfnb9//3//+l6FDh3LdddfR\nvn17fvWrX3Ho0CEAhg8fzj333FOx7S9+8QtGjx4NlF3hmD59esXP//jHP7j55ptp3749d955J198\n8QV33HEH7du3Z/DgweTl5QHw3HPPVSrz8OHDla6UtG3bljfeeIPs7Gzat2/PuHHjWL16Nb179+bK\nK69kzJgx+Hy+ENeWiHWaTEhcMgyDnj17snXrVnbu3Fnx+IIFC7jpppswTbPGfZcvX85bb73FO++8\nwzfffMNrr71W7XZz587lj3/8I2vXriUtLY077riDO+64g7Vr13L++efz9NNP+x3vW2+9xezZs1m6\ndClr167l/vvv57nnnmP58uXs2bOHuXPn+p+8iIhN+dv3l5SU8Nvf/pahQ4eyatUqli5dysGDBytu\nX3ryySfZsGEDCxYs4F//+hfff/99xZtJVb3xxhs888wzrFq1ioMHD3L33Xfz0EMPsWbNGhITE/nn\nP/952nhP9sEHH7Bw4ULefPNN3nzzTZ555hlee+01Fi5cyOrVq1m6dKnVKhIJOd3mJHHJNE3q1atH\njx49ePvtt/nNb37Dpk2bSEtL49xzzz3tvsOGDSMtLY20tDQ6derEjh07qt3u+uuvp23btgBceeWV\neL1eOnbsCECnTp2YOXOm3/HecsstNGzYEIA2bdpw9dVX07x5cwAuu+wy9uzZ43dZIiJ25W/fn5CQ\nwJtvvslZZ51FUVEReXl5NGzYkP379wOQlZXF+PHjeeSRR/B4PPzzn/8kLS2t2mP27duXFi1aANCu\nXTsAzj//fACuuuqq034mr+obW3fccQcpKSmcc845nHHGGdx8881kZGSQkZFBmzZtNBZIVNKVCYlr\nAwYMYOHChUDZO1MDBw6sdZ9GjRpV/JyQkFDjZeXyF/8ATqeT9PT0it8dDkdAl6NPLsvhcFC/fv1K\nv5/uSoqIiFRWW9/vcDhYvnw5PXr0oF+/fjz77LP8+OOPlfrt7OxsEhISaN68OZdddlmNx6o6FlTt\nvwMZCzIyMirte3JZhmFoLJCopMmExLXOnTtTVFTEunXreP/99+nbt2/Iyvb3g3wOhwOPx1Pxe0lJ\nCcXFxUGVJSIitaup7y/vazdv3szf//53pk2bxrJly3jxxRdp1apVpTKefvppWrRogWmaTJkypcZj\nBTsWHD58+JR9NRZILNJkQuKaw+Ggb9++PPLII7Rv354GDRrUeQytW7dm9+7dbN68mdLSUl544QUN\nGCIiYVRT31/+zv6PP/6I0+kkISEB0zRZunQpS5curXixv27dOmbPns3EiROZMGECL7zwgl9fIX46\nrVq1YtOmTezatYtjx44xdepUjQUSFzSZkLh0cgedm5vLtm3bKl3mNgyjYpuqP4fapZdeyl133cWo\nUaPo2rUrLper0r27emdKRCQ0/On7oewzb7m5udx8881ce+21zJgxg9tuu42tW7dy5MgR/vCHPzBq\n1Chat25d8a1M999/P263u9IxAumvb7zxRnr16sWtt95K7969ufTSS0lOTq6xLI0NEisMUzfgiYiI\niIhIECx/m9PkyZNZtmwZDoeDm2++meHDh4cgLBERERERiXaWJhPLly9n06ZNvPPOO7jdbvr06UO3\nbt1O+RCTiIiIiIjEH0uTia5du9K5c2cMwyA/Px+fz0dKSkqoYhMRERERkShm+QPYTqeTp556ir59\n+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\nJSIiIjY35draF30TkcjyazKxZMkSJk6ciGEYAJimSbNmzZgzZw4NGzZk5cqVLF++nHvvvZcPP/yw\nYrvT8WOTmFeeY6C5xmrdBJtvrFK+8ctOuUJk8rRb3WociE92ytdOuYJ98w1qX9MMfl2/xYsX07t3\n74rfr732WhYvXqzbnUREREREbMDSB7BfeOEFVqxYAcDHH39MZmamJhIiIiIiIjZh6crEN998w7hx\n4ygpKaF+/fo8/PDDnHPOOaGMT0REREREopSlyYSIiIiIiNiXVsAWEREREZGgaDIhIiIiIiJB0WRC\nRERERESCosmEiIiIiIgERZMJEREREREJiiYTIiIiIiISFE0mREREREQkKJpMiIiIiIhIUDSZEBER\nERGRoGgyISIiIiIiQdFkQkREREREgqLJhIiIiIiIBEWTCRERERERCYomEyIiIiIiEhRNJkRERERE\nJCguqwVMnjyZZcuW4XA4uPnmmxk+fHgIwhIRERERkWhnaTKxfPlyNm3axDvvvIPb7aZPnz5069aN\nVq1ahSg8ERERERGJVpYmE127dqVz584YhkF+fj4+n4+UlJRQxSYiIiIiIlHM8mcmnE4nTz31FH37\n9qVjx45kZWWFIi4REREREYlyhmmaZigKKi4uZuTIkfTr149bbrklFEWKiIiIiEgUs3RlYtu2bXzz\nzTcAJCcn07NnT77++uta9wvR/EViXPdXC+j+akGkwxCROqYxQMQ/GiclFlj6zMT27duZMWMGM2fO\nxOfz8cEHHzB48OBa9zMMg4KCQuJ9PDEMyMxMt0WuEHi+5dvk5xeGN7AwUfvGLzvlCifyrbvj2WMM\nAPueS8o3NKJpnFTbxjcr44ClyUROTg5ffvklubm5OJ1O+vTpQ69evfza1zSxReOAvXKFwPON9bpR\n+8YvO+Va1+xWt8o3voU732iqS7WtVGV5nYkxY8YwZsyYUMQiIiIiIiIxRCtgi4iIiIhIUDSZEBER\nERGRoGgyISIiIiIiQbH8mYnp06czb948ANq1a8ejjz6Ky2W5WBERERERiXKWrkxs3ryZ+fPnM3fu\nXBYuXEhpaSmzZ88OVWwiIiIiIhLFLE0mGjRowLhx40hKSgKgbdu25OXlhSQwERERERGJbpYmEy1b\ntqRDhw4AFBQU8Morr5CdnR2SwEREREREJLqF5MMNu3fv5p577uG2226rmFzUxjBCceToVp6jHXKF\n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\npeTl9ct4Mr+Zy6SsUmpymja25I1tvXRj0vyalFUyN6+jdW3b3X39du3apUmTJmnSpEmaMGGCcS2M\nwAAAIABJREFUm00BbRoyv1yStP6eohRXAgDwAsd1IP25ujJx7Ngx3XfffZo2bVrcL28qLz+R8bcn\ntyypqKjAiKxS4vM2bTMcPuH9xh1gfjOXSVmlU3mTybSxJW/L/HZcj5dJ82tSVsncvE64aiZmz56t\nyspKzZw5U0899ZQsy9LgwYM1efLkdte1bRkxOZJZWaXE5/XbWDK/mcukrMlm2tiSt/3l05lJ82tS\nVsm8vE64aibKyspUVlbmVS0AACCD/eMbg8/4e5eCpu+fudyzAzYkqSIAbnEHbAAAAACO0EwAAAAA\ncMSTj4atqKjQ+PHj9bvf/U4XXnihF5sE4LGzX17QEl5aAAAA4uG6mXjnnXf0i1/8Qvv37/egHAAA\n4JVYfokg8YsEU/BLJSSC65c5LVy4UNOmTVO3bt28qAcAAABAmnB9ZeKxxx6TJLm89x0AAACANOPJ\neyacMOH25Kbeij3Ref0ynpk4v21lycS8rTEpq5SanKaNrd/zelVfXHlt6dpj3XWgw1cK51YlpJ5E\nS5f5jUdrWTIxa1tMzetEypqJZN9tNZVMyiolLq9llUuSunb113hm0vzGMraZlLc9JmVNNtPG1u95\nvT6utpfXsqW///C7+v7Bb6oiVKtffXuD9nU6lrB6Es3v8xuP9sY+k7LGwrS8TqSsmTDh9uSm3oo9\nUXmbthkOn/B+4w5k4vy2NbaZmLc1JmWVTuVNJtPG1u95vTquxpI3GLX0wO7+uvGLHooqqo71OXrw\nnSGa0XeT3u9yxNN6Ei1d5jcerY19JmZti6l5nfCsmbDivD5i0u3JTcoqJT5va9tO1aeWpGp+E5E3\nlhwm7c8mZU0208bWq7yJOs55PRet5c1uCGry+zfqO8cu1NdZNfrVtzfo7w731PDPr9C/7RikJ7+1\nRdvO/zzt9o3W8qbjpye1N/Y8d3E2z5qJ1157zatNAQCATFNTq5/vGKw+X3VTeU6VHvv2eh3scEIf\ndzyuyqyIfrC/r8rev1G/u/Kvqa4UQBxS9jInIB7W8a/1r/v/Ksu2ZR3/nuwunVNdEgAgRlZVtfL+\nuEp9vuqmQ3lf67FrXj/1pmtLWtzzfVWG6jRx73V6YHd/1by5Q3XXfzu1RQOICc0EfM2qqlb25r8p\n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\nDV16yYp+XwoGnRfVxuOaNreZ/pip4NW+lC7jlbDnji3duf9q/eCTq3Uo72v98prXdSy36pzHTTaT\njhUmZZXMzetEypoJp7fszgRdu8aXPd7lnRqz4rqYlls6+q02f27a3JI3dm73fbuhQXXzX1J0+25J\n0uDjHyuw8jVlTSyVleX94cy0uU0m08bWbd5knQe84un82tL4j67R6M/6SJK6V3fSQ+/col9es15H\n8yolpX58TNqfTcoqmZfXiZQ1E+XlJ4y9PXk4fCKhyydaa/VYVuOTzpS5JW/8XO379Q3KXfaKQnv2\ny87L1WMXDNCkA39R1537VPl//qiaHwyXsrOcFXYWU+c2mUwbW7d5/XYeaI3Xzx3LlibuvU4ln1+u\n2kC9nurzhm47+E31PX6BHnr7Vv3y2vU6nH8iZeNj0rHCpKySuXmd8KyZsOK8PmLbMmJyWhJvbr+N\nU3v1mDa35I1vXUfL19Upb/HLCn38maId81U9fpT+/FZHfdihq/7w2VqF9n+u3AWrVH3XCCk3x1lx\nrTy+SXObTKaNrdu86TZWnsxvNKqf7Lletxy6TNXBOj3ed6N2FR7V9vMOafL7N+q6Yxfpobdv0aPX\nvJ7y8TFpf/YyayzvGWp6v1Cq3l9k0tw65dlN61577TVdeOGFXm0OABrVRpT3x5caG4nOBar60R2K\ndj1PknQ4p1Pj38/rrNCBw8p/YaVUVZPiggG4Fo0qd9U63XLoMlUGI3rs269rV+FRSVJdMKpfX71Z\nf+n6mQrr8jT1nVsUOHw0xQUD5krZy5yAVONTVNJAdY3y//iSgoe+ULRLZ1WNHyW781nvo+jUUVU/\nukN5L6xU8PBR5c9fruq7R8numJ+iogG40tCg3OWvKuuDj3QiVKvHrnld+wuOn7lIIKonv7VFD+y+\nQTd90VP2/BWqGne7ohddkKKiIcV3pQGZw7MrEwDgpU6RHOXPX6HgoS/UcP55qvrRHec0Ek3sDvmq\nmlCqhu7dFDx6TPnzlsn6uiLJFQNwrb5eeYtfVtYHHynaIU8PX7vunEaiSTRg6+k+f9G67vtk1UaU\nv2CVgp8eTHLBAFw3E2vWrNHIkSNVUlKimTNnelETAMN1qc3T1LdvVfCLcjVccL6q7ilt/0pDXq6q\nxo9S/cUXKHDsK+XPXSbr+FfJKRiAe5E65b24RqF9nyha0EFVE+7QgY5tP4dty9asy99U5Lt9ZUXq\n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\nGABwHDDacaI5HAOM07dqjwOSaO5crMa+//57TJs2DZWVlYiNjcXs2bPRu3fvUIehufXr12P+/Plw\nuVxITU3F448/rndImnnjjTeQn58Pj8eD9PR0TJ06Ve+QNHPPPffgrbfeQrdu3VBaWorp06ejqqoK\nl19+OebMmYN27drpHaKqGua7fft2PPvss3A6nejZsyf++te/GiLfuXPnYtmyZejevTuEEJAkCYMH\nD8bw4cMN178t5dq/f/+Q9q0ZxgEzjQEAxwEjHSca4hhgvL5VexzQpZggIiIiIqLIZ6xvkhARERER\nUciwmCAiIiIiIllYTBARERERkSwsJoiIiIiISBYWE0REREREJAuLCSIiIiIikoXFBJEMH330EWbO\nnAkA2LdvH6ZNmwbAN8vt/fffr2NkREQUChwHiHw4zwSRQqtXr8b777+PpUuX6h0KERHpgOMAmRmL\nCTKNTz/9FM888wyuvPJKHD16FBaLBTNnzsS1116L5557DiUlJbBarejVqxf++Mc/IjExER9//DFe\nfPFFSJIEAJg0aRLuvfderFmzBoWFhXj66afx4IMP4uzZsxg8eDAee+wxDBkyBF999RUAYNGiRXjv\nvfdgs9lw6aWXYvr06UhJScH8+fNx9OhRnDlzBt999x06duyIuXPnomvXrno2ERGRoXEcIFIfL3Mi\nUzl48CDGjh2LgoICTJ48Gb/97W/x6quv4siRIygoKEBhYSFSUlKQk5MDwDfl/JQpU7By5UrMnj0b\nJSUl/nVJkoQrrrgCv/vd73DDDTfghRde8P8cANasWYP169fj3Xffxdq1azFkyBBMnjwZ9fX7rl27\n8MILL6CoqAiJiYlYvnx5iFuDiMh8OA4QqYvFBJlK7969MWDAAABAWloaXC4XFi5ciDFjxsBmswEA\nfvnLX2LHjh2ora3FfffdhyeeeAI5OTnYv38/nnjiiYBfa8uWLRg5ciQuueQSAMCoUaNQVlaGw4cP\nAwD69euHdu3aAQD69OmDiooKNVMlIqJmcBwgUheLCTIVq9Xa6HFzV/l5PB4IIeDxePCrX/0KBQUF\nGDBgALZs2YLhw4fj7NmzAb2W1+ttdt0ejwcAEBMT4/+5JEnNxkJEROriOECkLhYTZCoHDhzA/v37\nAQDr1q1DfHw8Hn74YbzzzjtwOp0AgDfeeAM33XQT4uLikJGRgSNHjiA7OxuzZs1CVVUVysvLG63T\narXC7XZf9FqDBg3CqlWrUFVVBQDIz89Hx44dcdVVV2mcJRERtYTjAJG6bHoHQBRKnTp1wsKFC3Hk\nyBG0a9cOr776KlJSUvD8888jOzsbXq8XPXr0wNy5cwEA06ZNQ25uLiwWX939yCOPoEePHti9e7d/\nnTfddBPmzZuHhx56CH/+85/9Px85ciROnz6NMWPGQAiBhIQELF682H8tLRERhR7HASJ18W5OZBqf\nfvop/vSnP2H9+vV6h0JERDrgOECkPl7mREREREREsvDMBBERERERycIzE0REREREJAuLCSIiIiIi\nkoXFBBERERERycJigoiIiIiIZGExQUREREREsrCYICIiIiIiWVhMEBERERGRLP8PoaUG1+rarZEA\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x113815450>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "query, context, target, lengths, target_indices = valid_batches[0]\n",
    "weight, output = net(Volatile(query), Volatile(context), lengths=lengths, return_weight=True)\n",
    "context = context.numpy()\n",
    "weight = weight.data.numpy()\n",
    "\n",
    "colors = sns.color_palette('husl', 3)\n",
    "fig, axs = plt.subplots(batch_size, 2, figsize=(10, 10), sharex=True, sharey=True)\n",
    "axs_min, axs_max = axs[:,0], axs[:,1]\n",
    "\n",
    "for i, (i_min, i_max) in enumerate(target_indices):\n",
    "    length = lengths[i]\n",
    "    w_min, w_max = weight[i]\n",
    "    c_min = [context[i,j,Data.min_position] for j in range(length)]\n",
    "    c_max = [context[i,j,Data.max_position] for j in range(length)]\n",
    "\n",
    "    axs_min[i].axvline(i_min, zorder=1, color=colors[2], label='min value')\n",
    "    axs_min[i].bar(np.arange(length) - 0.4, c_min, zorder=2, color=colors[1], lw=0, label='values')\n",
    "    axs_min[i].plot(np.arange(length), w_min[:length], zorder=3, color=colors[0], label='attention')\n",
    "\n",
    "    axs_max[i].axvline(i_max, zorder=1, color=colors[2], label='max value')\n",
    "    axs_max[i].bar(np.arange(length) - 0.4, c_max, zorder=2, color=colors[1], lw=0, label='values')\n",
    "    axs_max[i].plot(np.arange(length), w_max[:length], zorder=3, color=colors[0], label='attention')\n",
    "\n",
    "axs_min[0].set_title('Minimum')\n",
    "axs_max[0].set_title('Maximum')\n",
    "axs_max[0].legend(loc='best')    \n",
    "axs_min[0].legend(loc='best')\n",
    "axs_max[0].legend(loc='best')\n",
    "axs_min[-1].set_xlabel('position')\n",
    "axs_max[-1].set_xlabel('position')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
